/*
 * Bloque.h
 *
 *  Created on: 21/04/2013
 *      Author: pancho
 */

#ifndef BLOQUE_H_
#define BLOQUE_H_

#include <stdlib.h>
#include <list>
#include <typeinfo>
#include <iostream>


#include "Registro.h"
#include "RegistroOffset.h"
#include "RegistroTitulo.h"


using namespace std;


class Bloque {
private:
	unsigned short int NumeroBloque;
	unsigned short int TamanioDispersion;
	unsigned int TamanioBloque;
	list<Registro*>* ListaRegistros;

public:
	Bloque();
	Bloque(unsigned short int nuevoNumeroBloque, unsigned short int nuevoTamanioDispersion, unsigned int nuevoTamanioBloque);
	Bloque(string tipo, char* datos);

	unsigned short int getNumeroBloque();
	unsigned short int getTamanioDispersion();
	unsigned int getTamanioBloque();
	list<Registro*> * getListaRegistros();

	void setNumeroBloque(unsigned short int nuevoNumeroBloque);
	void setTamanioDispersion(unsigned short int nuevoTamanioDispersion);
	void setTamanioBloque(unsigned int nuevoTamanioBloque);
	void setListaRegistros(list<Registro*>* nuevaListaRegistros);

	bool chequearSiEntraElDato(string unTitulo);
	bool chequearSiEntraElDato(unsigned int unId);
	bool chequearSiEntraElDato(Registro* unRegistro);

	bool InsertarRegistro(Registro* registro);

	void eliminarId(string titulo, unsigned int id);
	void eliminarId(unsigned int id);

	bool EstaRegistro(unsigned int idCancion);
	Registro* BuscarRegistro(unsigned int idCancion); //el registro viene solo con la clave inicializada

	bool EstaRegistro(string unTitulo);
	Registro* BuscarRegistro(string tituloABuscar); //el registro viene solo con la clave inicializada

	void DuplicarTamanioDispersion();
	void DividirTamanioDispersion();

	char* blockToChar();

	virtual ~Bloque();
};

#endif /* BLOQUE_H_ */
